package top.hymsk.ecommerce.controller.restful.product;

import org.springframework.web.bind.annotation.*;
import top.hymsk.ecommerce.anno.Log;
import top.hymsk.ecommerce.anno.TokenAnalysis;
import top.hymsk.ecommerce.pojo.response.GeneralResponse;
import top.hymsk.ecommerce.service.ProductService;

import javax.servlet.http.HttpServletRequest;

/**
 * 买家商品 /product/buyer
 * (基本完成)
 *
 * @author 花于陌上开
 */
@CrossOrigin  //允许跨域访问
@RestController
@RequestMapping("/product/buyer")
public class BuyerProductRestController {
    private final HttpServletRequest request;
    private final ProductService productService;

    public BuyerProductRestController(HttpServletRequest request, ProductService productService) {
        this.request = request;
        this.productService = productService;
    }

    /**
     * 获取商品详情信息
     * (基本完成)
     *
     * @param productId 商品id
     * @return 响应信息
     */
    @Log
    @GetMapping("/detail")
    public GeneralResponse getDetail(Integer productId) {
        //查询商品详细信息
        return productService.getProductByBuyer(productId);
    }

    /**
     * 搜索商品
     * (基本完成)
     *
     * @param word 搜索词
     * @param page 分页参数
     * @return 响应信息
     */
    @Log
    @GetMapping("/search")
    public GeneralResponse search(String word, Integer page) {
        //搜索商品
        return productService.searchProductByWord(word, page);
    }

    /**
     * 获取商品列表
     * (基本完成)
     *
     * @param page 分页参数
     * @return 响应信息
     */
    @Log
    @GetMapping("/get")
    public GeneralResponse get(Integer page) {
        //搜索商品
        return productService.searchProduct(page);
    }

    /**
     * 获取评论信息
     * (基本完成)
     *
     * @param productId 商品id
     * @param page      分页参数
     * @return 响应信息
     */
    @Log
    @GetMapping("/remarkList")
    public GeneralResponse getRemarkList(Integer productId, Integer page) {
        //获取商品评论信息
        return productService.getRemarkList(productId, page);
    }

    /**
     * 获取购物车列表
     * (基本完成)
     *
     * @param token 用户鉴权token
     * @param page  分页参数
     * @return 响应信息
     */
    @Log
    @TokenAnalysis
    @PostMapping("/cart/list")
    public GeneralResponse getList(String token, Integer page) {
        Integer userId = (Integer) request.getAttribute("userId");
        //获取购物车信息
        return productService.getCartList(userId, page);
    }

    /**
     * 添加商品到购物车
     * (基本完成)
     *
     * @param token     用户鉴权token
     * @param productId 商品id
     * @param number       商品数量
     * @return 响应信息
     */
    @Log
    @TokenAnalysis
    @PostMapping("/cart/add")
    public GeneralResponse addCart(String token, Integer productId, Integer number) {
        Integer userId = (Integer) request.getAttribute("userId");
        return productService.addProductToCart(userId, productId, number);
    }

    /**
     * 修改购物车商品数量
     * (基本完成)
     *
     * @param token     用户鉴权token
     * @param productId 商品id
     * @param num       商品数量
     * @return 响应信息
     */
    @Log
    @TokenAnalysis
    @PostMapping("/cart/update")
    public GeneralResponse updateCart(String token, Integer productId, Integer num) {
        Integer userId = (Integer) request.getAttribute("userId");
        return productService.updateProductToCart(userId, productId, num);
    }

    /**
     * 删除购物车商品
     * (基本完成)
     *
     * @param token     用户鉴权token
     * @param productId 商品id
     * @return 响应信息
     */
    @Log
    @TokenAnalysis
    @PostMapping("/cart/remove")
    public GeneralResponse removeCart(String token, Integer productId) {
        Integer userId = (Integer) request.getAttribute("userId");
        return productService.removeProductFromCart(userId, productId);
    }
}







